package com.ByteDance.service.impl;

import com.ByteDance.model.po.UserInfos;
import com.ByteDance.mapper.UserMapper;
import com.ByteDance.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * <p>
 * 用户信息表 服务实现类
 * </p>
 *
 * @author 朱哥
 * @since 2024-02-20
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfos> implements IUserService {

    /**
     * 用户注册实现类
     * @param username
     * @param password
     * @return userInfos
     *
     */
    @Override
    public UserInfos register(String username, String password) {
        //若传入的用户名或密码为空，直接返回null
        if(StringUtils.isEmpty(username)|| StringUtils.isEmpty(password)){
            return null;
        }

        //创建一个UserInfos对象，接收查询结果
        UserInfos user = lambdaQuery().eq(UserInfos::getUsername, username).one();//使用IService提供的lambdaQuery来设置条件

        //查询该用户是否存在,username在数据库唯一

        if(user!=null){//不为空，说明用户存在
            return null;
        }

        /*密码加密存储--先不实现
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        userEntity.setPassword(passwordEncoder.encode(password));*/

        //在此之前出现过一个空指针异常问题，这样写就没错
        user = new UserInfos();//实例化UserInfos对象，为user对象分配内存空间
        user.setUsername(username);
        user.setPassword(password);

        baseMapper.insert(user);
        return user;

    }

    @Override
    public UserInfos login(String username, String password) {
        //若传入的用户名或密码为空，直接返回null
        if(StringUtils.isEmpty(username)|| StringUtils.isEmpty(password)){
            return null;
        }

        /**
         * 若使用密码加密处理，逻辑如下
         */
        /*//查询当前用户名对应的用户
        UserEntity user = baseMapper.selectOne(new QueryWrapper<UserEntity>().eq("username", username));
        // 不存在此用户名的用户
        if (user == null)
            return null;

        //数据库中加密的密码
        String passwordDB = user.getPassword();
        //判断用户输入的密码和数据库中密码是否匹配
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        if (passwordEncoder.matches(password, passwordDB))
            //密码正确则返回用户
            return user;
        //密码错误返回null
        return null;*/

        //创建一个UserInfos对象，接收查询结果
        /**
         * 虽然这么判断用户名和密码是否正确，也可以成功
         * UserInfos user = lambdaQuery().eq(UserInfos::getUsername, username).eq(UserInfos::getPassword,password).one();//使用IService提供的lambdaQuery来设置条件
         */

        //先通过用户名查询到对应的用户信息，然后再验证密码是否匹配√

        //查询该用户是否存在,username在数据库唯一
        UserInfos user = lambdaQuery().eq(UserInfos::getUsername, username).one();

        if(user != null && user.getPassword().equals(password)){//不为空，说明用户存在
            return user;
        }else {
            return null;
        }
    }

}
